# ============================================
# 密码质量控制配置文件
# ============================================
# 本文件由Ansible自动生成 - 请勿手动编辑
# 定义了系统密码的复杂度要求和安全策略

# ============================================
# 基本长度和字符类别要求
# ============================================

# 新密码的最小可接受长度
minlen = {{ security_password_policy.min_length }}

# 新密码所需的最少字符类别数量
# 字符类别包括：数字、大写字母、小写字母、特殊字符
minclass = 3

# 允许的相同字符最大连续重复次数
maxrepeat = 3

# 允许的同一类别字符最大连续重复次数
maxclassrepeat = 4

# ============================================
# 密码内容检查配置
# ============================================

# 是否检查密码中是否包含用户GECOS信息中的词汇
gecoscheckcheck = 1

# 是否使用cracklib字典检查密码
dictcheck = 1

# 是否检查密码中是否包含用户名
usercheck = 1

# 从用户名中提取用于检查的子字符串长度
usersubstr = 3

# 是否检查密码中是否包含连续字符序列（如123、abc）
sequence = 3

# 字典文件路径，用于检查密码是否包含字典词汇
wordlist = /usr/share/dict/words

# ============================================
# 字符类型要求配置
# ============================================

# 密码中必须包含的最少数字个数
# 负值表示必须包含，正值表示最多包含，0表示不限制
{% if security_password_policy.require_numbers %}
dcredit = -1    # 至少包含1个数字
{% else %}
dcredit = 0     # 不要求包含数字
{% endif %}

# 密码中必须包含的最少大写字母个数
{% if security_password_policy.require_uppercase %}
ucredit = -1    # 至少包含1个大写字母
{% else %}
ucredit = 0     # 不要求包含大写字母
{% endif %}

# 密码中必须包含的最少小写字母个数
{% if security_password_policy.require_lowercase %}
lcredit = -1    # 至少包含1个小写字母
{% else %}
lcredit = 0     # 不要求包含小写字母
{% endif %}

# 密码中必须包含的最少特殊字符个数
{% if security_password_policy.require_special %}
ocredit = -1    # 至少包含1个特殊字符
{% else %}
ocredit = 0     # 不要求包含特殊字符
{% endif %}

# ============================================
# 密码相似性和复杂性检查
# ============================================

# 新密码与旧密码必须不同的最少字符数
difok = 5

# 是否检查密码是否为回文（正反读都一样）
palindrome = 1

# 是否检查密码是否为旧密码的旋转变形
rotate = 1

# 是否拒绝与旧密码相似的新密码
similar = deny

# 是否拒绝对旧密码的简单修改
simple = deny

# 是否拒绝过于简单的密码
simplicity = deny

# ============================================
# 高级安全检查配置
# ============================================

# 是否检查密码中的单调字符序列（如1234、abcd）
# 数值表示允许的最大单调序列长度
monotonic = 4

# 是否检查密码中的键盘模式（如qwerty、asdf）
# 数值表示允许的最大键盘模式长度
keyboard = 4

# ============================================
# 策略执行配置
# ============================================

# 是否对root用户也强制执行密码策略
enforcing = 1

# 密码不符合要求时的重试次数
retry = 3

# 是否向未知用户显示密码要求
show_unknown_user = 0

# 是否仅对本地用户应用策略
local_users_only = 1